#ifndef LOGINUI_H
#define LOGINUI_H

#include <QDialog>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QRadioButton>
#include <QButtonGroup>
#include <QGroupBox>

#include <QFrame>
#include <QMessageBox>
#include <QTimer>
#include <QPixmap>
#include <QIcon>
#include "../business/usermanager.h"
#include "../utils/filehandler.h"

// 使用命名空间
using namespace RestaurantSystem;

/**
 * @brief 登录界面类
 * 
 * 提供用户和管理员的登录功能，包括：
 * - 角色选择（顾客/管理员）
 * - 用户认证
 * - 友好的错误提示
 * - 美观的界面设计
 */
class LoginUI : public QDialog
{
    Q_OBJECT

public:
    /**
     * @brief 用户角色枚举
     */
    enum class UserRole {
        Customer = 0,   // 顾客
        Admin = 1       // 管理员
    };

    explicit LoginUI(QWidget *parent = nullptr);
    ~LoginUI();

    /**
     * @brief 获取当前选择的用户角色
     * @return 用户角色
     */
    UserRole getCurrentRole() const;

    /**
     * @brief 获取登录成功的用户ID
     * @return 用户ID，如果未登录则返回空字符串
     */
    QString getLoggedInUserId() const;

    /**
     * @brief 获取登录成功的用户名
     * @return 用户名
     */
    QString getLoggedInUsername() const;



signals:
    /**
     * @brief 登录成功信号
     * @param role 用户角色
     * @param userId 用户ID
     * @param username 用户名
     */
    void loginSuccessful(UserRole role, const QString &userId, const QString &username);

    /**
     * @brief 取消登录信号
     */
    void loginCancelled();

private slots:
    /**
     * @brief 处理登录按钮点击
     */
    void handleLogin();

    /**
     * @brief 处理注册按钮点击
     */
    void handleRegister();



    /**
     * @brief 处理角色切换
     */
    void handleRoleChanged();





private:
    /**
     * @brief 初始化界面
     */
    void initializeUI();

    /**
     * @brief 创建标题区域
     */
    void createTitleArea();

    /**
     * @brief 创建角色选择区域
     */
    void createRoleSelection();

    /**
     * @brief 创建登录表单区域
     */
    void createLoginForm();

    /**
     * @brief 创建按钮区域
     */
    void createButtonArea();

    /**
     * @brief 应用样式表
     */
    void applyStyleSheet();

    /**
     * @brief 验证输入
     * @return true表示输入有效
     */
    bool validateInput();

    /**
     * @brief 显示错误消息
     * @param message 错误消息
     */
    void showErrorMessage(const QString &message);

    /**
     * @brief 清除所有输入
     */
    void clearInputs();

    /**
     * @brief 设置界面启用状态
     * @param enabled 是否启用
     */
    void setUIEnabled(bool enabled);





private:
    // 业务逻辑管理器
    UserManager *m_userManager;  // 指向单例的指针

    // 主布局
    QVBoxLayout *m_mainLayout;

    // 标题区域
    QLabel *m_titleLabel;
    QLabel *m_subtitleLabel;

    // 角色选择
    QGroupBox *m_roleGroupBox;
    QRadioButton *m_customerRadio;
    QRadioButton *m_adminRadio;
    QButtonGroup *m_roleButtonGroup;

    // 登录表单
    QGroupBox *m_loginGroupBox;
    QGridLayout *m_formLayout;
    QLabel *m_usernameLabel;
    QLineEdit *m_usernameEdit;
    QLabel *m_passwordLabel;
    QLineEdit *m_passwordEdit;




    // 按钮区域
    QHBoxLayout *m_buttonLayout;
    QPushButton *m_loginButton;
    QPushButton *m_registerButton;


    // 状态变量
    UserRole m_currentRole;
    QString m_loggedInUserId;
    QString m_loggedInUsername;


};

#endif // LOGINUI_H
